#include <algorithm>
#include <vector>
#include <set>
using namespace std;
class Solution
{
public:
    // 三指针 + 相撞指针穷举 + set去重
    vector<vector<int>> threeSum(vector<int> &nums)
    {
        set<vector<int>> se;
        vector<vector<int>> res;
        sort(nums.begin(), nums.end());
        for (int i = 0; i < nums.size(); i++)
        {
            for (int j = i + 1, k = nums.size() - 1; k > j;)
            {
                int t = nums[i] + nums[j] + nums[k];
                if (t > 0)
                {
                    k--;
                }
                else if (t < 0)
                {
                    j++;
                }
                else
                {
                    se.insert({nums[i], nums[j], nums[k]});
                    k--, j++;
                }
            }
        }
        res.insert(res.begin(), se.begin(), se.end());
        return res;
    }
};